package src.E_Thread;

// Lambda表达式（λ）
// 作用：避免匿名内部类定义过多，简化代码留下核心逻辑，jdk8之后出现
public class E07_Lambda_01 {

    // 2、静态内部类
    static class Like2 implements ILike{
        @Override
        public void lambda() {
            System.out.println("I like Lambda2");
        }
    }

    public static void main(String[] args) {

        // 3、局部内部类
        class Like3 implements ILike{
            @Override
            public void lambda() {
                System.out.println("I like Lambda3");
            }
        }

        // 4、匿名内部类（ps：它只是实现了接口，并没有实例化，因为接口不能被实例化）
        ILike like4 = new ILike() {
            @Override
            public void lambda() {
                System.out.println("I like Lambda4");
            }
        };

        new Like1().lambda();
        new Like2().lambda();
        new Like3().lambda();
        like4.lambda();
        // 5、用lambda简化，舍弃了接口和方法的代码，因为是函数式接口，一个接口一个方法
        ILike like5 = ()->{System.out.println("I like Lambda5");};
        like5.lambda();
    }
}

// 定义一个函数式接口
interface ILike{
    void lambda();
}

// 1、实现类
class Like1 implements ILike{
    @Override
    public void lambda() {
        System.out.println("I like Lambda1");
    }
}